#include<iostream>
using namespace std;
const int N = 360;
const int M = 50;
int f[M][M][M][M];//分别记录每种卡片使用的张数
int n, m;
int p[N];
int cnt[5];
int ret;
int main()
{
	cin >> n >> m;
	for (int i = 1;i <= n;i++)
	{
		cin >> p[i];
	}
	for (int i = 1;i <= m;i++)
	{
		int x = 0;
		cin >> x;
		cnt[x]++;//记录每张卡片的张数
	}
	//注意最开始就是站在第一个点位的所以默认都有值p[1]
	f[0][0][0][0] = p[1];
	for (int a = 0;a <= cnt[1];a++)
	{
		for (int b = 0;b <= cnt[2];b++)
		{
			for (int c = 0;c <= cnt[3];c++)
			{
				for (int d = 0;d <= cnt[4];d++)
				{
					//首先0000的时候不会进入代码，0001的时候第一次进去
					
					//注意点是从1开始存的所以x这里要+1
					int x =1+a+ b * 2 + c * 3 + d * 4;
					int& t = f[a][b][c][d];//注意更新当前这些卡片时候的最大值
					if (a) t = max(t, f[a -1][b][c][d] + p[x]);
					if (b) t = max(t, f[a][b-1][c][d] + p[x]);
					if (c) t = max(t, f[a][b][c-1][d] + p[x]);
					if (d) t = max(t, f[a][b][c][d-1] + p[x]);
				}
			}
		}
	}
	//输出四张卡片都用完的情况
	cout << f[cnt[1]][cnt[2]][cnt[3]][cnt[4]] << endl;
	return 0;
}
